home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / tp84.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  17KB  |  501 lines

  1. /***************************************************************************
  2.  
  3. Time Pilot 84 Memory Map (preliminary)
  4.  
  5. driver by Marc Lafontaine
  6.  
  7. TODO:
  8. - the slave CPU multiplexes sprites. We are cheating now, and reading them
  9.   from somewhere else.
  10.  
  11.  
  12. The schematics are available on the net.
  13.  
  14. There is 3 CPU for this game.
  15.  Two 68A09E for the game.
  16.  A Z80A for the sound
  17.  
  18. As I understand it, the second 6809 is for displaying
  19.  the sprites. If we do not emulate him, all work well, except
  20.  that the player cannot die.
  21.  Address 57ff must read 0 to pass the RAM test if the second CPU
  22.  is not emulated.
  23.  
  24.  
  25. ---- Master 6809 ------
  26.  
  27. Write
  28.  2000-27ff MAFR Watch dog ?
  29.  2800      COL0 a register that index the colors Proms
  30.  3000      reset IRQ
  31.  3001      OUT2  Coin Counter 2
  32.  3002      OUT1  Coin Counter 1
  33.  3003      MUT
  34.  3004      HREV
  35.  3005      VREV
  36.  3006      -
  37.  3007      GMED
  38.  3800      SON   Sound on
  39.  3A00      SDA   Sound data
  40.  3C00      SHF0 SHF1 J2 J3 J4 J5 J6 J7  background Y position
  41.  3E00      L0 - L7                      background X position
  42.  
  43. Read:
  44.  2800      in0  Buttons 1
  45.  2820      in1  Buttons 2
  46.  2840      in2  Buttons 3
  47.  2860      in3  Dip switches 1
  48.  3000      in4  Dip switches 2
  49.  3800      in5  Dip switches 3 (not used)
  50.  
  51. Read/Write
  52.  4000-47ff Char ram, 2 pages
  53.  4800-4fff Background character ram, 2 pages
  54.  5000-57ff Ram (Common for the Master and Slave 6809)  0x5000-0x517f sprites data
  55.  6000-ffff Rom (only from $8000 to $ffff is used in this game)
  56.  
  57.  
  58. ------ Slave 6809 --------
  59.  0000-1fff SAFR Watch dog ?
  60.  2000      seem to be the beam position (if always 0, no player collision is detected)
  61.  4000      enable or reset IRQ
  62.  6000-67ff DRA
  63.  8000-87ff Ram (Common for the Master and Slave 6809)
  64.  E000-ffff Rom
  65.  
  66.  
  67. ------ Sound CPU (Z80) -----
  68. There are 3 or 4 76489AN chips driven by the Z80
  69.  
  70. 0000-1fff Rom program (A6)
  71. 2000-3fff Rom Program (A4) (not used or missing?)
  72. 4000-43ff Ram
  73. 6000-7fff Sound data in
  74. 8000-9fff Timer
  75. A000-Bfff Filters
  76. C000      Store Data that will go to one of the 76489AN
  77. C001      76489 #1 trigger
  78. C002      76489 #2 (optional) trigger
  79. C003      76489 #3 trigger
  80. C004      76489 #4 trigger
  81.  
  82. ***************************************************************************/
  83.  
  84. #include "driver.h"
  85. #include "vidhrdw/generic.h"
  86.  
  87.  
  88. /* In Machine */
  89. READ_HANDLER( tp84_beam_r );
  90. WRITE_HANDLER( tp84_catchloop_w ); /* JB 970829 */
  91. void tp84_init_machine(void); /* JB 970829 */
  92.  
  93. extern unsigned char *tp84_videoram2;
  94. extern unsigned char *tp84_colorram2;
  95. extern unsigned char *tp84_scrollx;
  96. extern unsigned char *tp84_scrolly;
  97. WRITE_HANDLER( tp84_videoram2_w );
  98. WRITE_HANDLER( tp84_colorram2_w );
  99. WRITE_HANDLER( tp84_col0_w );
  100. void tp84_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  101. int tp84_vh_start(void);
  102. void tp84_vh_stop(void);
  103. void tp84_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  104.  
  105.  
  106. static unsigned char *sharedram;
  107.  
  108. static READ_HANDLER( sharedram_r )
  109. {
  110.     return sharedram[offset];
  111. }
  112.  
  113. static WRITE_HANDLER( sharedram_w )
  114. {
  115.     sharedram[offset] = data;
  116. }
  117.  
  118.  
  119. READ_HANDLER( tp84_sh_timer_r )
  120. {
  121.     /* main xtal 14.318MHz, divided by 4 to get the CPU clock, further */
  122.     /* divided by 2048 to get this timer */
  123.     /* (divide by (2048/2), and not 1024, because the CPU cycle counter is */
  124.     /* incremented every other state change of the clock) */
  125.     return (cpu_gettotalcycles() / (2048/2)) & 0x0f;
  126. }
  127.  
  128. WRITE_HANDLER( tp84_filter_w )
  129. {
  130.     int C;
  131.  
  132.     /* 76489 #0 */
  133.     C = 0;
  134.     if (offset & 0x008) C +=  47000;    /*  47000pF = 0.047uF */
  135.     if (offset & 0x010) C += 470000;    /* 470000pF = 0.47uF */
  136.     set_RC_filter(0,1000,2200,1000,C);
  137.  
  138.     /* 76489 #1 (optional) */
  139.     C = 0;
  140.     if (offset & 0x020) C +=  47000;    /*  47000pF = 0.047uF */
  141.     if (offset & 0x040) C += 470000;    /* 470000pF = 0.47uF */
  142. //    set_RC_filter(1,1000,2200,1000,C);
  143.  
  144.     /* 76489 #2 */
  145.     C = 0;
  146.     if (offset & 0x080) C += 470000;    /* 470000pF = 0.47uF */
  147.     set_RC_filter(1,1000,2200,1000,C);
  148.  
  149.     /* 76489 #3 */
  150.     C = 0;
  151.     if (offset & 0x100) C += 470000;    /* 470000pF = 0.47uF */
  152.     set_RC_filter(2,1000,2200,1000,C);
  153. }
  154.  
  155. WRITE_HANDLER( tp84_sh_irqtrigger_w )
  156. {
  157.     cpu_cause_interrupt(2,0xff);
  158. }
  159.  
  160.  
  161.  
  162. /* CPU 1 read addresses */
  163. static struct MemoryReadAddress readmem[] =
  164. {
  165.     { 0x2800, 0x2800, input_port_0_r },
  166.     { 0x2820, 0x2820, input_port_1_r },
  167.     { 0x2840, 0x2840, input_port_2_r },
  168.     { 0x2860, 0x2860, input_port_3_r },
  169.     { 0x3000, 0x3000, input_port_4_r },
  170.     { 0x4000, 0x4fff, MRA_RAM },
  171.     { 0x5000, 0x57ff, sharedram_r },
  172.     { 0x8000, 0xffff, MRA_ROM },
  173.     { -1 }    /* end of table */
  174. };
  175.  
  176. /* CPU 1 write addresses */
  177. static struct MemoryWriteAddress writemem[] =
  178. {
  179.     { 0x2000, 0x2000, MWA_RAM }, /*Watch dog?*/
  180.     { 0x2800, 0x2800, tp84_col0_w },
  181.     { 0x3000, 0x3000, MWA_RAM },
  182.     { 0x3800, 0x3800, tp84_sh_irqtrigger_w },
  183.     { 0x3a00, 0x3a00, soundlatch_w },
  184.     { 0x3c00, 0x3c00, MWA_RAM, &tp84_scrollx }, /* Y scroll */
  185.     { 0x3e00, 0x3e00, MWA_RAM, &tp84_scrolly }, /* X scroll */
  186.     { 0x4000, 0x43ff, videoram_w, &videoram , &videoram_size},
  187.     { 0x4400, 0x47ff, tp84_videoram2_w, &tp84_videoram2 },
  188.     { 0x4800, 0x4bff, colorram_w, &colorram },
  189.     { 0x4c00, 0x4fff, tp84_colorram2_w, &tp84_colorram2 },
  190.     { 0x5000, 0x57ff, sharedram_w, &sharedram },
  191.     { 0x5000, 0x5177, MWA_RAM, &spriteram, &spriteram_size },    /* FAKE (see below) */
  192.     { 0x8000, 0xffff, MWA_ROM },
  193.     { -1 }    /* end of table */
  194. };
  195.  
  196.  
  197. /* CPU 2 read addresses */
  198. static struct MemoryReadAddress readmem_cpu2[] =
  199. {
  200.     { 0x0000, 0x0000, MRA_RAM },
  201.     { 0x2000, 0x2000, tp84_beam_r }, /* beam position */
  202.     { 0x6000, 0x67ff, MRA_RAM },
  203.     { 0x8000, 0x87ff, sharedram_r },
  204.     { 0xe000, 0xffff, MRA_ROM },
  205.     { -1 }    /* end of table */
  206. };
  207.  
  208. /* CPU 2 write addresses */
  209. static struct MemoryWriteAddress writemem_cpu2[] =
  210. {
  211.     { 0x0000, 0x0000, MWA_RAM }, /* Watch dog ?*/
  212.     { 0x4000, 0x4000, tp84_catchloop_w }, /* IRQ enable */ /* JB 970829 */
  213.     { 0x6000, 0x67ff, MWA_RAM },
  214. //    { 0x67a0, 0x67ff, MWA_RAM, &spriteram, &spriteram_size },    /* REAL (multiplexed) */
  215.     { 0x8000, 0x87ff, sharedram_w },
  216.     { 0xe000, 0xffff, MWA_ROM },
  217.     { -1 }    /* end of table */
  218. };
  219.  
  220.  
  221. static struct MemoryReadAddress sound_readmem[] =
  222. {
  223.     { 0x0000, 0x3fff, MRA_ROM },
  224.     { 0x4000, 0x43ff, MRA_RAM },
  225.     { 0x6000, 0x6000, soundlatch_r },
  226.     { 0x8000, 0x8000, tp84_sh_timer_r },
  227.     { -1 }    /* end of table */
  228. };
  229.  
  230. static struct MemoryWriteAddress sound_writemem[] =
  231. {
  232.     { 0x0000, 0x3fff, MWA_ROM },
  233.     { 0x4000, 0x43ff, MWA_RAM },
  234.     { 0xa000, 0xa1ff, tp84_filter_w },
  235.     { 0xc000, 0xc000, MWA_NOP },
  236.     { 0xc001, 0xc001, SN76496_0_w },
  237.     { 0xc003, 0xc003, SN76496_1_w },
  238.     { 0xc004, 0xc004, SN76496_2_w },
  239.     { -1 }    /* end of table */
  240. };
  241.  
  242.  
  243.  
  244. INPUT_PORTS_START( tp84 )
  245.     PORT_START      /* IN0 */
  246.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  247.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  248.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
  249.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
  250.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
  251.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  252.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  253.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  254.  
  255.     PORT_START      /* IN1 */
  256.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
  257.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  258.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
  259.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
  260.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  261.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
  262.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  263.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  264.  
  265.     PORT_START      /* IN2 */
  266.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  267.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  268.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  269.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  270.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  271.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
  272.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  273.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  274.  
  275.     PORT_START      /* DSW0 */
  276.     PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
  277.     PORT_DIPSETTING(    0x02, DEF_STR( 4C_1C ) )
  278.     PORT_DIPSETTING(    0x05, DEF_STR( 3C_1C ) )
  279.     PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
  280.     PORT_DIPSETTING(    0x04, DEF_STR( 3C_2C ) )
  281.     PORT_DIPSETTING(    0x01, DEF_STR( 4C_3C ) )
  282.     PORT_DIPSETTING(    0x0f, DEF_STR( 1C_1C ) )
  283.     PORT_DIPSETTING(    0x03, DEF_STR( 3C_4C ) )
  284.     PORT_DIPSETTING(    0x07, DEF_STR( 2C_3C ) )
  285.     PORT_DIPSETTING(    0x0e, DEF_STR( 1C_2C ) )
  286.     PORT_DIPSETTING(    0x06, DEF_STR( 2C_5C ) )
  287.     PORT_DIPSETTING(    0x0d, DEF_STR( 1C_3C ) )
  288.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) )
  289.     PORT_DIPSETTING(    0x0b, DEF_STR( 1C_5C ) )
  290.     PORT_DIPSETTING(    0x0a, DEF_STR( 1C_6C ) )
  291.     PORT_DIPSETTING(    0x09, DEF_STR( 1C_7C ) )
  292.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  293.     PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
  294.     PORT_DIPSETTING(    0x20, DEF_STR( 4C_1C ) )
  295.     PORT_DIPSETTING(    0x50, DEF_STR( 3C_1C ) )
  296.     PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) )
  297.     PORT_DIPSETTING(    0x40, DEF_STR( 3C_2C ) )
  298.     PORT_DIPSETTING(    0x10, DEF_STR( 4C_3C ) )
  299.     PORT_DIPSETTING(    0xf0, DEF_STR( 1C_1C ) )
  300.     PORT_DIPSETTING(    0x30, DEF_STR( 3C_4C ) )
  301.     PORT_DIPSETTING(    0x70, DEF_STR( 2C_3C ) )
  302.     PORT_DIPSETTING(    0xe0, DEF_STR( 1C_2C ) )
  303.     PORT_DIPSETTING(    0x60, DEF_STR( 2C_5C ) )
  304.     PORT_DIPSETTING(    0xd0, DEF_STR( 1C_3C ) )
  305.     PORT_DIPSETTING(    0xc0, DEF_STR( 1C_4C ) )
  306.     PORT_DIPSETTING(    0xb0, DEF_STR( 1C_5C ) )
  307.     PORT_DIPSETTING(    0xa0, DEF_STR( 1C_6C ) )
  308.     PORT_DIPSETTING(    0x90, DEF_STR( 1C_7C ) )
  309.     PORT_DIPSETTING(    0x00, "Invalid" )
  310.  
  311.     PORT_START      /* DSW1 */
  312.     PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
  313.     PORT_DIPSETTING(    0x03, "2" )
  314.     PORT_DIPSETTING(    0x02, "3" )
  315.     PORT_DIPSETTING(    0x01, "5" )
  316.     PORT_DIPSETTING(    0x00, "7" )
  317.     PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
  318.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  319.     PORT_DIPSETTING(    0x04, DEF_STR( Cocktail ) )
  320.     PORT_DIPNAME( 0x18, 0x18, "Bonus" )
  321.     PORT_DIPSETTING(    0x18, "10000 50000" )
  322.     PORT_DIPSETTING(    0x10, "20000 60000" )
  323.     PORT_DIPSETTING(    0x08, "30000 70000" )
  324.     PORT_DIPSETTING(    0x00, "40000 80000" )
  325.     PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) )
  326.     PORT_DIPSETTING(    0x60, "Easy" )
  327.     PORT_DIPSETTING(    0x40, "Normal" )
  328.     PORT_DIPSETTING(    0x20, "Medium" )
  329.     PORT_DIPSETTING(    0x00, "Hard" )
  330.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
  331.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  332.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  333. INPUT_PORTS_END
  334.  
  335.  
  336. static struct GfxLayout charlayout =
  337. {
  338.     8,8,    /* 8*8 characters */
  339.     1024,    /* 1024 characters */
  340.     2,    /* 2 bits per pixel */
  341.     { 4, 0 },    /* the two bitplanes for 4 pixels are packed into one byte */
  342.     {  0, 1, 2, 3, 8*8+0, 8*8+1, 8*8+2, 8*8+3 },    /* bits are packed in groups of four */
  343.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  344.     16*8    /* every char takes 16 bytes */
  345. };
  346. static struct GfxLayout spritelayout =
  347. {
  348.     16,16,    /* 16*16 sprites */
  349.     256,    /* 256 sprites */
  350.     4,    /* 4 bits per pixel */
  351.     { 256*64*8+4, 256*64*8+0, 4 ,0 },
  352.     { 0, 1, 2, 3, 8*8+0, 8*8+1, 8*8+2, 8*8+3,
  353.             16*8+0, 16*8+1, 16*8+2, 16*8+3, 24*8+0, 24*8+1, 24*8+2, 24*8+3 },
  354.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  355.             32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
  356.     64*8    /* every sprite takes 64 bytes */
  357. };
  358.  
  359. static struct GfxDecodeInfo gfxdecodeinfo[] =
  360. {
  361.     { REGION_GFX1, 0, &charlayout,        0, 64*8 },
  362.     { REGION_GFX2, 0, &spritelayout, 64*4*8, 16*8 },
  363.     { -1 } /* end of array */
  364. };
  365.  
  366.  
  367.  
  368. static struct SN76496interface sn76496_interface =
  369. {
  370.     3,    /* 3 chips */
  371.     { 14318180/8, 14318180/8, 14318180/8 },
  372.     { 75, 75, 75 }
  373. };
  374.  
  375.  
  376.  
  377. static struct MachineDriver machine_driver_tp84 =
  378. {
  379.     /* basic machine hardware  */
  380.     {
  381.         {
  382.             CPU_M6809,
  383.             1500000,    /* ??? */
  384.             readmem,writemem,0,0,
  385.             interrupt,1
  386.         },
  387.         {
  388.             CPU_M6809,
  389.             1500000,    /* ??? */
  390.             readmem_cpu2,writemem_cpu2,0,0,
  391.             interrupt,1
  392.         },
  393.         {
  394.             CPU_Z80 | CPU_AUDIO_CPU,
  395.             14318180/4,
  396.             sound_readmem,sound_writemem,0,0,
  397.             ignore_interrupt,1    /* interrupts are triggered by the main CPU */
  398.         }
  399.     },
  400.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  401.     100,    /* 100 CPU slices per frame - an high value to ensure proper */
  402.             /* synchronization of the CPUs */
  403.     0,
  404.  
  405.     /* video hardware */
  406.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  407.     gfxdecodeinfo,                /* GfxDecodeInfo * */
  408.     256,4096, /* see tp84_vh_convert_color_prom for explanation */
  409.     tp84_vh_convert_color_prom,                            /* convert color prom routine */
  410.  
  411.     VIDEO_TYPE_RASTER,
  412.     0,                            /* vh_init routine */
  413.     tp84_vh_start,            /* vh_start routine */
  414.     tp84_vh_stop,            /* vh_stop routine */
  415.     tp84_vh_screenrefresh,    /* vh_update routine */
  416.  
  417.     /* sound hardware */
  418.     0,0,0,0,
  419.     {
  420.         {
  421.             SOUND_SN76496,
  422.             &sn76496_interface
  423.         }
  424.     }
  425. };
  426.  
  427.  
  428.  
  429. /***************************************************************************
  430.  
  431.   Game driver(s)
  432.  
  433. ***************************************************************************/
  434.  
  435. ROM_START( tp84 )
  436.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  437.     ROM_LOAD( "tp84_7j.bin",  0x8000, 0x2000, 0x605f61c7 )
  438.     ROM_LOAD( "tp84_8j.bin",  0xa000, 0x2000, 0x4b4629a4 )
  439.     ROM_LOAD( "tp84_9j.bin",  0xc000, 0x2000, 0xdbd5333b )
  440.     ROM_LOAD( "tp84_10j.bin", 0xe000, 0x2000, 0xa45237c4 )
  441.  
  442.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the second CPU */
  443.     ROM_LOAD( "tp84_10d.bin", 0xe000, 0x2000, 0x36462ff1 )
  444.  
  445.     ROM_REGION( 0x10000, REGION_CPU3 )    /* 64k for code of sound cpu Z80 */
  446.     ROM_LOAD( "tp84s_6a.bin", 0x0000, 0x2000, 0xc44414da )
  447.  
  448.     ROM_REGION( 0x4000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  449.     ROM_LOAD( "tp84_2j.bin",  0x0000, 0x2000, 0x05c7508f ) /* chars */
  450.     ROM_LOAD( "tp84_1j.bin",  0x2000, 0x2000, 0x498d90b7 )
  451.  
  452.     ROM_REGION( 0x8000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  453.     ROM_LOAD( "tp84_12a.bin", 0x0000, 0x2000, 0xcd682f30 ) /* sprites */
  454.     ROM_LOAD( "tp84_13a.bin", 0x2000, 0x2000, 0x888d4bd6 )
  455.     ROM_LOAD( "tp84_14a.bin", 0x4000, 0x2000, 0x9a220b39 )
  456.     ROM_LOAD( "tp84_15a.bin", 0x6000, 0x2000, 0xfac98397 )
  457.  
  458.     ROM_REGION( 0x0500, REGION_PROMS )
  459.     ROM_LOAD( "tp84_2c.bin",  0x0000, 0x0100, 0xd737eaba ) /* palette red component */
  460.     ROM_LOAD( "tp84_2d.bin",  0x0100, 0x0100, 0x2f6a9a2a ) /* palette green component */
  461.     ROM_LOAD( "tp84_1e.bin",  0x0200, 0x0100, 0x2e21329b ) /* palette blue component */
  462.     ROM_LOAD( "tp84_1f.bin",  0x0300, 0x0100, 0x61d2d398 ) /* char lookup table */
  463.     ROM_LOAD( "tp84_16c.bin", 0x0400, 0x0100, 0x13c4e198 ) /* sprite lookup table */
  464. ROM_END
  465.  
  466. ROM_START( tp84a )
  467.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  468.     ROM_LOAD( "tp84_7j.bin",  0x8000, 0x2000, 0x605f61c7 )
  469.     ROM_LOAD( "f05",          0xa000, 0x2000, 0xe97d5093 )
  470.     ROM_LOAD( "tp84_9j.bin",  0xc000, 0x2000, 0xdbd5333b )
  471.     ROM_LOAD( "f07",          0xe000, 0x2000, 0x8fbdb4ef )
  472.  
  473.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the second CPU */
  474.     ROM_LOAD( "tp84_10d.bin", 0xe000, 0x2000, 0x36462ff1 )
  475.  
  476.     ROM_REGION( 0x10000, REGION_CPU3 )    /* 64k for code of sound cpu Z80 */
  477.     ROM_LOAD( "tp84s_6a.bin", 0x0000, 0x2000, 0xc44414da )
  478.  
  479.     ROM_REGION( 0x4000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  480.     ROM_LOAD( "tp84_2j.bin",  0x0000, 0x2000, 0x05c7508f ) /* chars */
  481.     ROM_LOAD( "tp84_1j.bin",  0x2000, 0x2000, 0x498d90b7 )
  482.  
  483.     ROM_REGION( 0x8000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  484.     ROM_LOAD( "tp84_12a.bin", 0x0000, 0x2000, 0xcd682f30 ) /* sprites */
  485.     ROM_LOAD( "tp84_13a.bin", 0x2000, 0x2000, 0x888d4bd6 )
  486.     ROM_LOAD( "tp84_14a.bin", 0x4000, 0x2000, 0x9a220b39 )
  487.     ROM_LOAD( "tp84_15a.bin", 0x6000, 0x2000, 0xfac98397 )
  488.  
  489.     ROM_REGION( 0x0500, REGION_PROMS )
  490.     ROM_LOAD( "tp84_2c.bin",  0x0000, 0x0100, 0xd737eaba ) /* palette red component */
  491.     ROM_LOAD( "tp84_2d.bin",  0x0100, 0x0100, 0x2f6a9a2a ) /* palette green component */
  492.     ROM_LOAD( "tp84_1e.bin",  0x0200, 0x0100, 0x2e21329b ) /* palette blue component */
  493.     ROM_LOAD( "tp84_1f.bin",  0x0300, 0x0100, 0x61d2d398 ) /* char lookup table */
  494.     ROM_LOAD( "tp84_16c.bin", 0x0400, 0x0100, 0x13c4e198 ) /* sprite lookup table */
  495. ROM_END
  496.  
  497.  
  498.  
  499. GAMEX( 1984, tp84,  0,    tp84, tp84, 0, ROT90, "Konami", "Time Pilot '84 (set 1)", GAME_NO_COCKTAIL )
  500. GAMEX( 1984, tp84a, tp84, tp84, tp84, 0, ROT90, "Konami", "Time Pilot '84 (set 2)", GAME_NO_COCKTAIL )
  501.